package zhtt;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import zhtt.demo01.Blog;

/**
 * Created by zhtt on 2017/4/30.
 */
public class BlogTest {
    @Test
    /** 一级缓存测试：一级缓存默认是自动开开启的。 **/
    public void selectBlog() {
        SqlSession sqlSession = null;
        try {
            sqlSession = SessionFactoryUtil.getSqlSessionIntance();
            /** 第一次查询，执行后发现有sql语句输出 **/
            System.out.println("\n\n------------1.0----------------");
            Blog blog = sqlSession.selectOne("zhtt.demo01.Blog.selectBlog", 2);
            System.out.println("------------1.1----------------");
            System.out.println(blog);
            /** 第二次查询，查询条件一样，执行后无Sql语句输出，但结果正常返回 **/
            System.out.println("\n\n------------2.0----------------");
            Blog blog2 = sqlSession.selectOne("zhtt.demo01.Blog.selectBlog",2);
            System.out.println("------------2.1----------------");
            System.out.println(blog2);

            /** 在这里清空当前session缓存  **/
            sqlSession.clearCache();
            /** 第三次查询，查询条件一样，执行后有Sql语句输出，因为缓存被清空（当有插入、更新、删除时都会自动刷新缓存。） **/
            System.out.println("\n\n------------3.0----------------");
            Blog blog3 = sqlSession.selectOne("zhtt.demo01.Blog.selectBlog",2);
            System.out.println("------------3.1----------------");
            System.out.println(blog3);
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
        } finally {
            if (sqlSession != null)
                sqlSession.close();
        }
    }

    @Test
    /** 二级缓存测试
     * 1)、implements Serializable
     * 2)、定要提交事务之后二级缓存才会起作用**/
    public void selectBlog2(){
        SqlSession sqlSession01 = null;
        SqlSession sqlSession02 = null;
        try {
            sqlSession01 = SessionFactoryUtil.getSqlSessionIntance();
            //使用二级缓存时，User类必须实现一个Serializable接口===> User implements Serializable
            sqlSession02 = SessionFactoryUtil.getSqlSessionIntance();
            /** 第一次查询，执行后发现有sql语句输出 **/
            System.out.println("\n\n------------1.0----------------");
            Blog blog = sqlSession01.selectOne("zhtt.demo01.Blog.selectBlog", 2);
            sqlSession01.commit();//不懂为啥，这个地方一定要提交事务之后二级缓存才会起作用
            System.out.println("------------1.1----------------");
            System.out.println(blog);
            /** 第二次查询，查询条件一样，执行后无Sql语句输出，但结果正常返回 **/
            System.out.println("\n\n------------2.0----------------");
            Blog blog2 = sqlSession02.selectOne("zhtt.demo01.Blog.selectBlog",2);
            System.out.println("------------2.1----------------");
            System.out.println(blog2);
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession01.rollback();
            sqlSession02.rollback();
        } finally {
            if (sqlSession01 != null)
                sqlSession01.close();
            if (sqlSession02 != null)
                sqlSession02.close();
        }

    }
}